package com.wzf.utils;

import org.caffinitas.ohc.CacheSerializer;

import java.nio.ByteBuffer;

//value-自定义对象序列化器，这里用Protostuff实现,可以自己选择使用kryo、Hession等实现
public class OhcProtostuffObjectSerializer implements CacheSerializer<Object> {

    /**
     * 将缓存数据序列化到 ByteBuffer 中，ByteBuffer是OHC管理的堆外内存区域的映射。
     */
    @Override
    public void serialize(Object t, ByteBuffer byteBuffer) {
        byteBuffer.put(ProtostuffUtils.serialize(t));
    }
    /**
     * 对堆外缓存的数据进行反序列化
     */
    @Override
    public Object deserialize(ByteBuffer byteBuffer) {
        byte[] bytes = new byte[byteBuffer.remaining()];
        byteBuffer.get(bytes);
        return  ProtostuffUtils.deserialize(bytes, Object.class);
    }

    /**
     * 计算字序列化后占用的空间
     */
    @Override
    public int serializedSize(Object t) {
        return ProtostuffUtils.serialize(t).length;
    }
}
